package com.liuyz.demo2;

public class 局部内部类 { // 外部其他类

    public static void main(String[] args) {
        Outer outer = new Outer();
        outer.m2();
    }

}

class Outer { // 外部类
    private int n1 = 100; // 属性
    private int n2 = 200; // 属性

    public Outer() { // 构造器
        System.out.println("Outer->构造器");
    }

    private void m1() { // 方法
        System.out.println("Outer->m1()");
    }

    { // 代码块
        System.out.println("Outer->代码块");
    }

    public void m2() {
        class Inner { // 局部内部类：一般定义在方法或代码块中

            private int n2 = 500; // 局部内部类的私有属性

            private void m3() {
                System.out.println("Outer-n1->" + n1); // 访问外部类的私有属性
                m1(); // 调用外部类的私有方法
                System.out.println("Inner->n2->" + n2); // 直接访问局部内部类的属性
                System.out.println("Outer->n2->" + Outer.this.n2); // 通过 外部类名.属性名 访问同名的外部类的属性
            }
        }

        // 可以在当前方法中创建局部内部类的对象，调用局部内部类的方法
        Inner inner = new Inner();
        inner.m3();
    }


}
